1
Oltre la Trappola NULL
AI013Lesson 2
00:00

Il passaggio dai macro di stile C ai letterali tipizzati sicuri in C++ rappresenta un cambiamento fondamentale nell'usabilità della lingua, risolvendo il "trappola NULL" dove l'ambiguità del macro zero causa errori logici silenziosi.

1. Il Fallimento della Risoluzione degli Overload

Nei vecchi standard (C++98), NULL viene spesso definito come 0. Quando viene passato a funzioni sovraccaricate, il compilatore lo risolve NULL come un intero. Ciò è dimostrato da:

if (std::is_same<decltype(NULL), decltype(0)>::value)
std::cout << "NULL è un int";

2. La Soluzione nullptr

C++11 ha introdotto nullptr, una parola chiave di tipo std::nullptr_t. A differenza del macro, non può essere convertito implicitamente in un tipo integrale (eccetto bool), garantendo che siano selezionati gli overload specifici per puntatori.

La Vecchia Trappolafoo(NULL)Chiama foo(int)La Soluzione Modernafoo(nullptr)Chiama foo(char*)

3. Collegamento e Interoperabilità

C++ moderno richiede extern "C" per prevenire il mangling dei nomi quando si collega con codice C (ad esempio, compilato con gcc). Mantenere puntatori tipizzati sicuri a questo confine è fondamentale.

$$\text{std::nullptr\_t} \neq \text{int}$$

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>